// node 6_旋转数组.js

//slice() 数组剪切,参数为开始位置和结束位置,slice() 方法不会改变原始数组

// 示例：
//     输入:[1,2,3,4,5,6,7] k=3
//     输出:[5,6,7,1,2,3,4]
//     解释:
//         向右旋转1步:[7,1,2,3,4,5,6]
//         向右旋转2步:[6,7,1,2,3,4,5]
//         向右旋转3步:[5,6,7,1,2,3,4]

const arr = [1,2,3,4,5,6,7]
const k = 8

//数组剪切-拼接1
function operateArr1(arr,k) {
    let index = k % arr.length //取模 除去多余的操作次数
    let newArr = [...arr]
    // return [...newArr.splice(arr.length-index,index),...newArr.splice(0,arr.length-index)]
    return newArr.splice(-index).concat(newArr)
}

//数组剪切-拼接2
function operateArr2(arr,k) {
    let index = k % arr.length //取模 除去多余的操作次数
    let newArr = [...arr]
    return newArr.slice(-index).concat(newArr.slice(0,newArr.length-index))
}

//遍历
function operateArr3(arr,k) {
    let index = k % arr.length //取模 除去多余的操作次数
    let newArr = [...arr]
    while(index-- > 0){
        let item = newArr.pop()
        newArr.unshift(item)
    }
    return newArr
}

console.log("方法一："+operateArr1(arr,k))
console.log("方法二："+operateArr2(arr,k))
console.log("方法三："+operateArr3(arr,k))
console.log("原数组："+arr)
console.log("旋转值："+k)